import { get, post, put, del, getPage } from '../utils/http';
import type { BaseResponse, PageResponse, PageData } from '../types/response';
import type { BillItem, BillQuery, ListUseFlowPageReq, ListUserFlowPageResp, AcctBalanceResp } from '../types/bill';

/**
 * 账单服务类
 */
export class BillService {
  /**
   * 获取账单列表
   * @param query 查询参数
   * @returns 账单列表
   */
  static async getBillList(query: BillQuery): Promise<PageResponse<BillItem>> {
    return await getPage<BillItem>('/api/bills', query);
  }

  /**
   * 获取账单详情
   * @param id 账单ID
   * @returns 账单详情
   */
  static async getBillDetail(id: string): Promise<BaseResponse<BillItem>> {
    return await get<BillItem>(`/api/bills/${id}`);
  }

  /**
   * 创建账单
   * @param bill 账单信息
   * @returns 创建结果
   */
  static async createBill(bill: BillItem): Promise<BaseResponse<boolean>> {
    return await post<boolean>('/api/bills', bill);
  }

  /**
   * 更新账单
   * @param id 账单ID
   * @param bill 账单信息
   * @returns 更新结果
   */
  static async updateBill(id: string, bill: BillItem): Promise<BaseResponse<boolean>> {
    return await put<boolean>(`/api/bills/${id}`, bill);
  }

  /**
   * 删除账单
   * @param id 账单ID
   * @returns 删除结果
   */
  static async deleteBill(id: string): Promise<BaseResponse<boolean>> {
    return await del<boolean>(`/api/bills/${id}`);
  }
}

/**
 * 获取账单流水分页列表
 * @param params 请求参数
 * @returns 分页数据
 */
export const listUseFlowPage = (params: ListUseFlowPageReq) => {
  return post<PageData<ListUserFlowPageResp>>('/useFlow/listUseFlowPage', params);
};

/**
 * 获取账户余额信息
 * @returns 账户余额信息
 */
export const getAcctBalance = () => {
  return get<AcctBalanceResp>('/accountBalance/getAcctBalance');
};

/**
 * 获取礼品卡总可用余额
 * @returns 礼品卡总可用余额
 */
export const getGiftCardTotalBalance = () => {
  return get<string>('/giftCard/calAllGiftCardBalance');
}; 